package core

import (
	"encoding/json"
	"os"
	"path/filepath"
)

// StatusFileStorage 封装 JSON 文件的读写
type StatusFileStorage struct {
	dir string
}

// NewStatusFileStorage 创建文件存储
func NewStatusFileStorage(dir string) *StatusFileStorage {
	statusDir := filepath.Join(dir, "status")
	_ = os.MkdirAll(statusDir, 0755)
	return &StatusFileStorage{dir: dir}
}

// 根据 任务ID 加载对应的状态文件
func (fs *StatusFileStorage) filePath(taskID string) string {
	return filepath.Join(fs.dir, taskID+".json")
}

// Save 保存任务状态信息
func (fs *StatusFileStorage) Save(task *Task) error {
	data, err := json.MarshalIndent(task, "", "  ")
	if err != nil {
		return err
	}
	return os.WriteFile(fs.filePath(task.ID), data, 0644)
}

// Load 根据任务ID加载任务状态内容
func (fs *StatusFileStorage) Load(taskID string) (*Task, error) {
	data, err := os.ReadFile(fs.filePath(taskID))
	if err != nil {
		return nil, err
	}
	var task Task
	if err := json.Unmarshal(data, &task); err != nil {
		return nil, err
	}
	return &task, nil
}

// Remove 删除收集任务的状态文件
func (fs *StatusFileStorage) Remove(taskID string) error {
	return os.Remove(fs.filePath(taskID))
}
